题解 AT3538@洛谷 | 3538@Atcoder 【Credits】

翻译者到此一游

没看题的回去!!!

这里是C++党领地

首先,头文件

#include <iostream>
#include <algorithm>

算法概括

想要上尽量少的课程获得k积分,就把每个课程获得的积分数量从大到小排序。

这里总课程数为n,第i个课程积分数为 aia_i

bool cmp(int a, int b) 
{
	return a > b;
}
int main()
{
	//sth.
    sort(a, a+n, cmp);
}

从前往后累加,直到获得分数大于等于k。

int s = 0;
for(int i=0;i<n;i++)
{
	s += a[i];
	if(s >= k)
	{
		cout<<i+1<<endl;
		return 0;
	}
}
cout<<-1<<endl;

最后,完整代码:

#include <iostream>
#include <algorithm>
using namespace std;

bool cmp(int a, int b) {return a > b;}

int main()
{
	int n, k;
	cin>>n>>k;
	int a[n];
	for(int i=0;i<n;i++) cin>>a[i];
	sort(a, a+n, cmp);
	int s = 0;
	for(int i=0;i<n;i++)
	{
		s += a[i];
		if(s >= k)
		{
			cout<<i+1<<endl;
			return 0;
		}
	}
	cout<<-1<<endl;
	return 0;
}